package modelo.estatico;

import java.awt.Rectangle;
import java.util.Enumeration;
import java.util.Hashtable;

import vista.cuartel.VistaCuartel;
import vista.proyectil.VistaCohete;

import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.ObjetoVivo;
import ar.uba.fi.algo3.titiritero.Posicionable;

import modelo.Contenedor;
import modelo.Posicion;
import modelo.Vector;
import modelo.proyectil.Cohete;
import modelo.proyectil.Proyectil;
import modelo.tanque.Tanque;

public class Cuartel implements  Estatico, Posicionable, ObjetoVivo{
	private Posicion posicion;
	private int ancho = 50;
	private int alto = 50;
	private boolean vivo = true;
	private int resistencia = 5;
	private int intensidadDeRebote = 8;
	public Cuartel (Posicion posicion){
		this.posicion=posicion;
	}
	public Posicion getPosicion() {
		return this.posicion;
	}
	
	
	public void setPosicion(Posicion p) {
		posicion = p;
		
	}

	public void colisionarConTanque(Tanque t) {
		t.setDireccion(new Vector(0,0));
	}

	public void colisionarConProyectil(Proyectil p) {
		resistencia--;
	}
	
	public Rectangle getBordes() {
		return new Rectangle(this.posicion.getX(),this.posicion.getY(),this.getAncho(),this.getAlto());
	}
	public int getAlto() {
		return alto;
	}
	public int getAncho() {
		return ancho;
	}
	
	public void setVivo(boolean v){
		vivo= v;
	}
	
	public boolean estaVivo(){
		return vivo;
	}
	
	public void vivir(){
		  chequearVida();
	}

	public int getX() {
		return this.posicion.getX();
	}

	public int getY() {
		return this.posicion.getY();
	}

	public Vector getDireccion(){
		return new Vector(0, 0);
	}
	
	public void chequearVida(){
		if (resistencia <=0){
			vivo=false;
			Contenedor.getInstance().setGameOver();
		}
	}
	@Override
	public int getIntensidadDeRebote() {
		return intensidadDeRebote ;
	}
	
	public String guardarSe() {
		String salida = "<Objeto Tipo=\"";
		salida += "Cuartel";
		salida += "\" PosX=\"";
		salida += this.posicion.getX();
		salida += "\" PosY=\"";
		salida += this.posicion.getY();
		salida += "\" Resistencia=\"";
		salida += this.resistencia;
		salida += "\" />\r";
		return salida;
	}
	public static void leer(Enumeration e, Hashtable h) {
		String key;
		String val;
		Cuartel cuartel = new Cuartel(new Posicion(0, 0));
		while (e.hasMoreElements()) {
			key = (String) e.nextElement();
			val = (String) h.get(key);
			if (key.equalsIgnoreCase("PosX")) {
				int posY = cuartel.getPosicion().getY();
				cuartel.setPosicion(new Posicion(Integer.parseInt(val), posY));
			} else if (key.equalsIgnoreCase("PosY")) {
				int posX = cuartel.getPosicion().getX();
				cuartel.setPosicion(new Posicion(posX, Integer.parseInt(val)));
			} else if (key.equalsIgnoreCase("Resistencia")) {
				cuartel.setResistencia(Integer.parseInt(val));
			}
		}
		Contenedor.getInstance().setCuartel(cuartel);
		VistaCuartel vistaCartuel = new VistaCuartel();
		vistaCartuel.setPosicionable(cuartel);
		ControladorJuego unControlador = Contenedor.getInstance().getControlador();
		unControlador.agregarDibujable(vistaCartuel);
		unControlador.agregarObjetoVivo(cuartel);
	}
	
	private void setResistencia(int resistencia) {
		this.resistencia = resistencia;
	}
}
